# @Time    : 2025/7/7 07:12
# @Author  : Lennert
# @FileName: getDatabaseinfo.py
# @Description : 这是一个示例
from pymongo import MongoClient

# 连接 MongoDB
client = MongoClient("mongodb://xingle_rw:123456@202.199.6.248:27017/?authSource=ArkTS_NPM")
db = client["ArkTS_NPM"]

# 使用你刚才迁移的目标集合
collection = db["npm_functionsv2"]  # 或者使用原集合 db["npm_functionsv2"]


def count_libraries():
    """统计 library 数量"""

    # 1. 总的 library 数量（包含不同版本）
    # 假设每个文档都有 library 和 version 字段
    total_libraries = collection.count_documents({})
    print(f"📊 总文档数量（包含所有版本）: {total_libraries}")

    # 2. 按照 library + version 组合统计（去重）
    pipeline_with_version = [
        {
            "$group": {
                "_id": {
                    "library": "$library",  # 替换为你的实际字段名
                    "version": "$version"  # 替换为你的实际字段名
                }
            }
        },
        {
            "$count": "unique_library_version_combinations"
        }
    ]

    result_with_version = list(collection.aggregate(pipeline_with_version))
    unique_with_version = result_with_version[0]["unique_library_version_combinations"] if result_with_version else 0
    print(f"📊 unique library+version 组合数量: {unique_with_version}")

    # 3. 忽略版本的 unique library 数量
    pipeline_without_version = [
        {
            "$group": {
                "_id": "$library"  # 只按 library 名称分组
            }
        },
        {
            "$count": "unique_libraries"
        }
    ]

    result_without_version = list(collection.aggregate(pipeline_without_version))
    unique_libraries = result_without_version[0]["unique_libraries"] if result_without_version else 0
    print(f"📊 unique library 数量（忽略版本）: {unique_libraries}")

    return {
        "total_documents": total_libraries,
        "unique_library_version_combinations": unique_with_version,
        "unique_libraries_ignore_version": unique_libraries
    }


# 执行统计
if __name__ == "__main__":
    results = count_libraries()

    print("\n" + "=" * 50)
    print("📈 统计结果汇总:")
    print(f"• 总文档数: {results['total_documents']}")
    print(f"• 不同 library+version 组合: {results['unique_library_version_combinations']}")
    print(f"• 不同 library（忽略版本）: {results['unique_libraries_ignore_version']}")

    if results['unique_libraries_ignore_version'] > 0:
        avg_versions = results['unique_library_version_combinations'] / results['unique_libraries_ignore_version']
        print(f"• 平均每个 library 有 {avg_versions:.2f} 个版本")
